import Vue from "vue";
import Vuex from "vuex";

// 安装vuex
Vue.use(Vuex);

// 状态数据：vuex所有数据都保存在state中
const state = {
  count: 0, // 定义数据，定义数据初始化值
};

// 只读的计算属性
const getters = {
  oddOrEven(state) {
    return (state.count & 1) === 1 ? "奇数" : "偶数";
  },
};

// 更新
// 是一个对象，包含n个用来间接更新的方法，往往会发送请求
const actions = {
  increment(store, num) {
    // 触发mutation
    store.commit("INCREMENT", num);
  },
  decrement({ commit }, num) {
    commit("DECREMENT", num);
  },
  incrementIfOdd({ commit, state }, num) {
    // if (state.count % 2 === 1) {
    if ((state.count & 1) === 1) {
      commit("INCREMENT", num);
    }
  },
  incrementAsync({ commit }, num) {
    setTimeout(() => {
      commit("INCREMENT", num);
    }, 1000);
  },
};

// 是一个对象，包含n个用来直接更新的方法，对state数据进行直接操作
const mutations = {
  INCREMENT(state, num) {
    state.count += num;
  },
  DECREMENT(state, num) {
    state.count -= num;
  },
};

// 创建store
const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations,
});

export default store;
